Trabajo final: Argentina y la Educación.


Manejo y Visualización de Datos
Maestría en Estadística Aplicada - FCEyE - UNR
Limpieza y analisis de datos y gráficos.

1 Argentina.

“Todos los datos fueron extraidos de”Encuesta permanente de Hogares”. Buenos Aires, agosto 2020.Instituto Nacional de Estadística y Censos (INDEC).”

1.1 Introducción

Este trabajo está destinado a explorar las herramientas que nos ofrece RStudio para el análisis, exploración, manipulación, visualizacion, … de datos.

Para llevar a cabo el trabajo seleccioné una base de datos “Encuesta permanente de Hogares”. Buenos Aires, agosto 2020.Instituto Nacional de Estadística y Censos (INDEC).”, la cual esta codificada y tiene muchas variables. Por lo que comence el trabajo seleccionando cuales eran las variables de interes, recortando la base y recodificando para que la lectura de la tabla sea adecuada y se pueda entender facilmente.

En esta primer parte se trabajo con herramientas para importar la base y para manipularla.

Luego de tener la base limpia comencé a visualizar los datos jugando un poco con las diferentes alternativas de colores, modelos, tipos de gráficas, con las diferentes variables, colocación de títulos, subtitulos, visualización plana e interactiva. Para lo cual utilicé librerias como ggplot2, plotly, algunas para manipular mapas, etc.

1.2 Analisis y limpieza de las encuentas permanentes de 2020.

library("readxl") #Importar los datos.
library("readr") # Para importar datos.
library("dplyr") # Manipulación de datos.
library("rmdformats") # para visualizar el formato de http elegido.

Luego de descargar la librería que vamos a utilizar, descargo el archivo con los datos que voy a trabajar.

usu_individual_T120_1_ <- read_excel("usu_individual_T120 (1).xlsx")

Debemos renombrar nuestra tabla para un mejor manejo.

Argentina <- usu_individual_T120_1_

1.2.1 Observamos los datos de la tabla.

A continuación se muestro las primeras filas y columnas de la tabla con la que vamos a trabajar.

## # A tibble: 16,670 × 7
##    CODUSU                        TRIMESTRE NRO_HO…¹ COMPO…²   H15 REGION MAS_500
##    <chr>                             <dbl>    <dbl>   <dbl> <dbl>  <dbl>   <dbl>
##  1 TQRMNOPPQHJKNOCDEIIAD00633066         1        1     1.5  1         1      NA
##  2 TQRMNOPPQHJLLMCDEGKDB00624652         1        1     2.5  1        43      NA
##  3 TQRMNOPPQHJMKMCDEFIAH00622969         1        1     2.5  0.5      43      NA
##  4 TQRMNOPPQHJMKMCDEHMHF00625809         1        1     1    1        42      NA
##  5 TQRMNOPPQHJMKNCDEIGED00626320         1        1     2.5  1        43      NA
##  6 TQRMNOPPQHJMKNCDEOHCH00628107         1        1     2.5  0.75     44      NA
##  7 TQRMNOPPQHJMLLCDEFMDB00623532         1        1     2.5  0.75     43      NA
##  8 TQRMNOPPQHJMLPCDEIMBF00627918         1        1     1.5  1        43      NA
##  9 TQRMNOPPQHJMLQCDEIJAH00627184         1        1     1.5  1         1      NA
## 10 TQRMNOPPQHJMLUCDEFIAH00622993         1        1     2.5  1        43      NA
## # … with 16,660 more rows, and abbreviated variable names ¹​NRO_HOGAR,
## #   ²​COMPONENTE

Debemos ver cuales son las variables de nuestra tabla para observar si debemos modificar algo.

names(Argentina)
##   [1] "CODUSU"     "ANO4"       "TRIMESTRE"  "NRO_HOGAR"  "COMPONENTE"
##   [6] "H15"        "REGION"     "MAS_500"    "AGLOMERADO" "PONDERA"   
##  [11] "CH03"       "CH04"       "CH05"       "CH06"       "CH07"      
##  [16] "CH08"       "CH09"       "CH10"       "CH11"       "CH12"      
##  [21] "CH13"       "CH14"       "CH15"       "CH15_COD"   "CH16"      
##  [26] "CH16_COD"   "NIVEL_ED"   "ESTADO"     "CAT_OCUP"   "CAT_INAC"  
##  [31] "IMPUTA"     "PP02C1"     "PP02C2"     "PP02C3"     "PP02C4"    
##  [36] "PP02C5"     "PP02C6"     "PP02C7"     "PP02C8"     "PP02E"     
##  [41] "PP02H"      "PP02I"      "PP03C"      "PP03D"      "PP3E_TOT"  
##  [46] "PP3F_TOT"   "PP03G"      "PP03H"      "PP03I"      "PP03J"     
##  [51] "INTENSI"    "PP04A"      "PP04B_COD"  "PP04B1"     "PP04B2"    
##  [56] "PP04B3_MES" "PP04B3_ANO" "PP04B3_DIA" "PP04C"      "PP04C99"   
##  [61] "PP04D_COD"  "PP04G"      "PP05B2_MES" "PP05B2_ANO" "PP05B2_DIA"
##  [66] "PP05C_1"    "PP05C_2"    "PP05C_3"    "PP05E"      "PP05F"     
##  [71] "PP05H"      "PP06A"      "PP06C"      "PP06D"      "PP06E"     
##  [76] "PP06H"      "PP07A"      "PP07C"      "PP07D"      "PP07E"     
##  [81] "PP07F1"     "PP07F2"     "PP07F3"     "PP07F4"     "PP07F5"    
##  [86] "PP07G1"     "PP07G2"     "PP07G3"     "PP07G4"     "PP07G_59"  
##  [91] "PP07H"      "PP07I"      "PP07J"      "PP07K"      "PP08D1"    
##  [96] "PP08D4"     "PP08F1"     "PP08F2"     "PP08J1"     "PP08J2"    
## [101] "PP08J3"     "PP09A"      "PP09A_ESP"  "PP09B"      "PP09C"     
## [106] "PP09C_ESP"  "PP10A"      "PP10C"      "PP10D"      "PP10E"     
## [111] "PP11A"      "PP11B_COD"  "PP11B1"     "PP11B2_MES" "PP11B2_ANO"
## [116] "PP11B2_DIA" "PP11C"      "PP11C99"    "PP11D_COD"  "PP11G_ANO" 
## [121] "PP11G_MES"  "PP11G_DIA"  "PP11L"      "PP11L1"     "PP11M"     
## [126] "PP11N"      "PP11O"      "PP11P"      "PP11Q"      "PP11R"     
## [131] "PP11S"      "PP11T"      "P21"        "DECOCUR"    "IDECOCUR"  
## [136] "RDECOCUR"   "GDECOCUR"   "PDECOCUR"   "ADECOCUR"   "PONDIIO"   
## [141] "TOT_P12"    "P47T"       "DECINDR"    "IDECINDR"   "RDECINDR"  
## [146] "GDECINDR"   "PDECINDR"   "ADECINDR"   "PONDII"     "V2_M"      
## [151] "V3_M"       "V4_M"       "V5_M"       "V8_M"       "V9_M"      
## [156] "V10_M"      "V11_M"      "V12_M"      "V18_M"      "V19_AM"    
## [161] "V21_M"      "T_VI"       "ITF"        "DECIFR"     "IDECIFR"   
## [166] "RDECIFR"    "GDECIFR"    "PDECIFR"    "ADECIFR"    "IPCF"      
## [171] "DECCFR"     "IDECCFR"    "RDECCFR"    "GDECCFR"    "PDECCFR"   
## [176] "ADECCFR"    "PONDIH"

Como se puede observar la tabla esta codificada, de modo que no sabemos bien de que esta hablando. Es por esto que vamos a utilizar “Encuenta permanente de Hogares. Diseño de registro y estructura para las bases preliminares Hogares y Personas. Buenos Aires, agosto 2020. Ministerio de Economía Argentina. Instituto Nacional de Estadísticas y Censos.”

1.2.2 Selecciono las variables con las que quiero trabajar.

Argentina_1 <- Argentina[, c(1, 4, 7,9, 11:21)]

Verifico que estén correctos los datos para poder modificar los nombres de las variables por nombres que pueda entender de que se trata el contenido de la columna.

colnames(Argentina_1)
##  [1] "CODUSU"     "NRO_HOGAR"  "REGION"     "AGLOMERADO" "CH03"      
##  [6] "CH04"       "CH05"       "CH06"       "CH07"       "CH08"      
## [11] "CH09"       "CH10"       "CH11"       "CH12"       "CH13"

1.2.3 Cambio de nombre a las variables.

Argentina_1 <- rename(Argentina_1,
                      c("provincia"=AGLOMERADO,
                        "parentesco"=CH03, 
                        "sexo"=CH04, 
                        "fecha_de_nacimiento"=CH05, 
                        "años_cumplidos"=CH06,
                        "estado_civil"=CH07, 
                        "cobertura_medica"=CH08,
                        "lee_y_escribe"=CH09,
                        "escolarizado"=CH10, 
                        "tipo_de_establecimiento"=CH11,
                        "nivel_de_cursado"=CH12,
                        "recibido"=CH13))

Vamos a visualizar como quedaron los nombres de las variables en nuestra tabla.

colnames(Argentina_1)
##  [1] "CODUSU"                  "NRO_HOGAR"              
##  [3] "REGION"                  "provincia"              
##  [5] "parentesco"              "sexo"                   
##  [7] "fecha_de_nacimiento"     "años_cumplidos"         
##  [9] "estado_civil"            "cobertura_medica"       
## [11] "lee_y_escribe"           "escolarizado"           
## [13] "tipo_de_establecimiento" "nivel_de_cursado"       
## [15] "recibido"

Quiero hacer un análisis de la tabla, los datos que tienen mis variables.

head(Argentina_1)
## # A tibble: 6 × 15
##   CODUSU        NRO_H…¹ REGION provi…² paren…³  sexo fecha_de_nacimiento años_…⁴
##   <chr>           <dbl>  <dbl>   <dbl>   <dbl> <dbl> <dttm>                <dbl>
## 1 TQRMNORVSHJO…       1     40      18       3     2 2002-01-31 00:00:00      18
## 2 TQRMNORVSHJO…       1     40      18       3     1 2007-07-16 00:00:00      12
## 3 TQRMNORVSHJO…       1     40      18       3     2 2014-01-22 00:00:00       6
## 4 TQRMNORVSHJO…       1     40      18       3     1 2019-02-20 00:00:00       1
## 5 TQSMNOQRQHLM…       1     40      18       1     1 1991-01-30 00:00:00      29
## 6 TQSMNOQRQHLM…       1     40      18       2     2 1992-05-18 00:00:00      27
## # … with 7 more variables: estado_civil <dbl>, cobertura_medica <dbl>,
## #   lee_y_escribe <dbl>, escolarizado <dbl>, tipo_de_establecimiento <dbl>,
## #   nivel_de_cursado <dbl>, recibido <dbl>, and abbreviated variable names
## #   ¹​NRO_HOGAR, ²​provincia, ³​parentesco, ⁴​años_cumplidos
str(Argentina_1)
## tibble [51,643 × 15] (S3: tbl_df/tbl/data.frame)
##  $ CODUSU                 : chr [1:51643] "TQRMNORVSHJOLPCDEGOIH00625031" "TQRMNORVSHJOLPCDEGOIH00625031" "TQRMNORVSHJOLPCDEGOIH00625031" "TQRMNORVSHJOLPCDEGOIH00625031" ...
##  $ NRO_HOGAR              : num [1:51643] 1 1 1 1 1 1 1 1 1 1 ...
##  $ REGION                 : num [1:51643] 40 40 40 40 40 40 40 40 40 40 ...
##  $ provincia              : num [1:51643] 18 18 18 18 18 18 18 18 18 18 ...
##  $ parentesco             : num [1:51643] 3 3 3 3 1 2 3 1 2 3 ...
##  $ sexo                   : num [1:51643] 2 1 2 1 1 2 2 1 2 1 ...
##  $ fecha_de_nacimiento    : POSIXct[1:51643], format: "2002-01-31" "2007-07-16" ...
##  $ años_cumplidos         : num [1:51643] 18 12 6 1 29 27 1 46 42 14 ...
##  $ estado_civil           : num [1:51643] 5 5 5 5 1 1 5 2 2 5 ...
##  $ cobertura_medica       : num [1:51643] 4 4 4 4 4 4 4 1 1 1 ...
##  $ lee_y_escribe          : num [1:51643] 1 1 1 3 1 1 3 1 1 1 ...
##  $ escolarizado           : num [1:51643] 1 1 1 0 2 2 0 2 2 2 ...
##  $ tipo_de_establecimiento: num [1:51643] 1 1 1 0 0 0 0 0 0 0 ...
##  $ nivel_de_cursado       : num [1:51643] 4 2 2 0 4 4 0 7 7 2 ...
##  $ recibido               : num [1:51643] 2 2 2 0 2 1 0 1 1 2 ...

Al evaluar la tabla observo que los datos estan codificados y no entiendo a que se refiere con cada número. De modo que utilizo de nuevo el material para decodificar, que nombramos antes. Con esto cambiamos toda la tabla.

Luego guardo mi nueva tabla con los datos limpios para trabajar luego con este material.

1.3 Analisis exploratorio de datos y gráficos

Como siempre comenzamos descargando la libreria con la que vamos a trabajar.

library("ggplot2") # Para trabajar con los gráficos en ggplot2
library("tidyr") # Para transformar los datos del dataset
library("dplyr") # Para manipular los datos
library("plyr") # Para manipular datos
library("reshape2") # Sirve para transformar datos.
library("sp") # Para tratar datos espaciales, clases y metodos de visualización.
library(raster) # Para trabajar capas de imagenesen los mapas.
library(rworldxtra) # Para cargar el dataset de mapas en alta resolusión.
library(sf) # Para datos espaciales y esta compuesta principalmente por puntos, lineas y polígonos.
library(tidyverse) # Contiene alrededor de 30 paquetes de libreria,
                   # lo descargo por si me olvido de algún paquete.
library(plotly) # Para trabajar con gráficos interactivos.
library(htmltools) # Para Manipular y escribir HTML
library(htmlwidgets) # un marco para crear windgets HTML
library(spData) # para trabajar con mapas
library(tmap) #para hacer interactivos los mapas
library(DT) #para realizar tablas dinámicas.

Descargo la tabla limpia y comienzo a trabajar con ella.

Argentina_limpio <- read_csv("Argentina_limpio.xlsx")

1.3.1 Diagrama de Puntos.

Utilizo Geom_point para realizar un gráfico de puntos, con facet_wrap voy a separar los gráficos dependiendo de lo que quiera, en este ejemplo los separe por sexo, con ncol elijo en cuantas columnas quiero que se visualice, con nrow en cuantas filas. theme en este caso me permite elgir el color del fondo “celeste”.

En labs voy poniendo las etiquetas que quiero, por ejemplo: title = título, Subtitle = subtítulo, Caption = informacion de los datos, x e y información sobre los ejes.

Por último con ggplotly podemos hacer interactivos los datos.

1.3.2 Gráfico de barra.

1.3.2.1 Barra 1.

En este caso se visualizan gráficos de barra con la función geom_bar, al escribir Show.lengend = FALSE le quito la leyenda de las referencias. Con coord_flip invierto los ejes.

1.3.2.2 Barra 2

Use width = 0.75 para cambiar el ancho de las barras. Position = “dodge” para que se visualicen una barra al lado de la otra y no una sobre la otra. scale_y_continuous sirve para modificar la escla del eje y, breaks= seq(0, 10000, 2000) en este caso escribimos que va del 0 al 10000, de 2000 en 2000.

1.3.2.3 Barra 3. Coordenadas Polares.

coord_polar es para visualizar en coordenadas polares. labs(x=NULL, y=NULL) con esta sentencia hago que no aparezcan las leyendas de las coordenadas x e y. panel.grid.major = element_line(color = “red”, size = 0.5, linetype = 2) sirve para cambiar el color de las lineas, el ancho y el grosor.

1.3.3 Gráfico de mosaicos.

scale_fill_gradient(low = “gray”, high = “green”) con esta sentencia le cambio los colores. Para cambiarle el color de las lineas que separan los rectángulos utilizo geom_tile(colour = “white”)

1.3.4 Histogramas.

1.3.4.1 Histograma 1.

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

scale_x_continuous(“Edad”, breaks= seq(0, 100, 10)) lo utilizo para cambiar las ecalas del eje x

1.3.4.2 Histograma con curva de densidad

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Para cambiar el color de las lineas y el reyeno de las barras utilizo: colour = 4, fill = “lightgreen”. geom_density() si no pongo nada adentro solo hace la curva de densidad, sin el área bajo la curva.

1.3.4.3 Histagrama con gráfica de densidad.

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

geom_density(lwd = 2, colour = 5, fill = 3, alpha = 0.50) con lwd cambio el grasor de la curva, con colour cambio el color de la curva, con fill cambio el tipo de transparencia que quiero usa en la densidad.

1.3.5 Boxplot.

Con geom_boxplot(fill=“green”, alpha=0.2) fill cambio el color de la caja y con Alpha la transparencia. Con plot.background = element_rect(fill = “lightgreen” cambio el color del fondo.

1.3.6 Mapas

Para trabajar con mapas tenemos que buscar previamente los poligonos que crean las mapas, dependiendo de cual queremos usar.

data("countriesHigh")
  • Para ver cómo se llaman los codigos de paises uso getData.

  • Si quiero ver el codigo de un país utilizo:

df <- getData('ISO3')

Para descargar los datos vectoriales del país seleccionado, en este caso Argentina,

Argentina <- getData(name = "GADM", country ="ARG", level=1)

Para que me muestre el mapa de Argentina con división política, level tiene que ser = 1, si escribo level = 2 me lo representa por departamento. el codigo del pais en este caso es facil, pero aveces no se sabe cual es, por eso es importante usar la opción getdata(ISO3).

Para transformar a SF

Argentina_sf <- Argentina%>%
  st_as_sf()

Luego analizo cuales son las variables del mapa, así puedo relacionar con el de mi trabajo.

colnames(Argentina_sf)
##  [1] "GID_0"     "NAME_0"    "GID_1"     "NAME_1"    "VARNAME_1" "NL_NAME_1"
##  [7] "TYPE_1"    "ENGTYPE_1" "CC_1"      "HASC_1"    "geometry"

Observo cuáles son los nombres de la columna NAME_1

unique(Argentina_sf$NAME_1)
##  [1] "Buenos Aires"           "Catamarca"              "Chaco"                 
##  [4] "Chubut"                 "Ciudad de Buenos Aires" "Córdoba"               
##  [7] "Corrientes"             "Entre Ríos"             "Formosa"               
## [10] "Jujuy"                  "La Pampa"               "La Rioja"              
## [13] "Mendoza"                "Misiones"               "Neuquén"               
## [16] "Río Negro"              "Salta"                  "San Juan"              
## [19] "San Luis"               "Santa Cruz"             "Santa Fe"              
## [22] "Santiago del Estero"    "Tierra del Fuego"       "Tucumán"

Armo un grupo con las provincias y los datos que quiero que se plasmen en el mapa

grupo <- Argentina_limpio %>%
  group_by(`provincia`) %>% 
  summarise(total = n())

Uno los datos. Agrupo las variables de name_1 con las provincias de mi base de datos.

dhWorld <-  Argentina_sf %>% 
  rename(provincia=NAME_1) %>% 
  full_join(grupo)

Filtro solo lo de interes, selecciono las variables que quiero usar.

mapa <- dhWorld %>% 
  dplyr::select(provincia,geometry,total)

1.3.6.1 Mapa con datos de cantidad de personas encuestadas.

map_plot <- mapa%>%
  ggplot(aes(fill=total))+
  geom_sf()+
  geom_sf_text(aes(label=total,size =0.1, 
                     color='affffff')) 

map_plot

Activamos visión interactiva del packege tmap

tmap_mode(“view”)

1.3.6.2 Mapa interactivo.

dhWorld_Plotly <- mapa %>% 
  mutate(text=paste0(provincia, "\n", total)) %>% 
  ggplot(aes(fill=total, text=text
  ))+
  geom_sf(color="white")+
  theme_void()

ggplotly(dhWorld_Plotly, tooltip = c("text")) 

1.4 Conclusión.

Podemos concluir que hay muchas herramientas nuevas que aprendimos y mucho por aprender a menejar. Los gráficos que se pueden crear son muy lindos visualmente y con muchas variables, lo cual lo hace más rico y completo al momento de sacar conclusiones estaddisticas. Si bien el programa no es dificil de manipular hay muchos códigos y palabras nuevas por aprender. La práctica y el juego es una herramienta muy valiosa y en este caso fue muy importante para llavar a cabo todo lo mostrado, se que se puede hacer mucho más, más prolijo y entretenido. Son cuestiones que de a poco voy a ir aprendiendo a manejar y cada día voy a lograr mejores resultados.